package com.dfd.store.utils;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.dfd.store.dao.UserDao;
import com.dfd.store.domain.User;

public class BeanFactory {
	public static Object getName(String name) {

		// 通过传递过来的name 获取application.xml中的name对应的class值

		try {
			// 获取到Document对象
			SAXReader reader = new SAXReader();
			InputStream isInputStream = BeanFactory.class.getClassLoader().getResourceAsStream("application.xml");
			Document document = reader.read(isInputStream);
			// 通过Document对象获取根节点beans
			Element rootElement = document.getRootElement();
			// 通过根节点获取到根节点下所有子节点bean
			List<Element> list = rootElement.elements();
			// 遍历集合,判断没个元素的id的值是否和当前name一致
			for (Element element : list) {
				// ele相当于beans 下的bean节点
				// 如果一致,获取到当前元素上class属性值
				String id = element.attributeValue("id");
				if (id.equals(name)) {
					String str = element.attributeValue("class");
					// 通过反射创建对象并且返回
					Class clazz = Class.forName(str);
					// 利用class值通过反射创建对象返回
					return clazz.newInstance();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return name;

	}
	public static void main(String[] args) throws Exception {
	    UserDao userDao = (UserDao) BeanFactory.getName("UserDao");
	    User user = new User();
	    user.setUsername("sss");
	    user.setPassword("sss");
	    User user2 = userDao.userLogin(user);
	    System.out.println(user2);
	}
}
